home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / pas / swag / misc.swg / 0047_Modify EXE Constants.pas < prev    next >
Pascal/Delphi Source File  |  1993-11-02  |  2KB  |  112 lines

  1. {
  2. JON JASIUNAS
  3.  
  4. >Is it possible to store variables in actual .EXE file of a TP program, inste
  5. >of making an external config file for it?  Thanks.
  6.  
  7. Sure.  Make them typed constants, then modify the .EXE whenever you want
  8. to store a change.
  9. }
  10.  
  11. type
  12.   tOwnerName = string[30];
  13.   tRegCode   = String[12];
  14.  
  15. const
  16.   OwnerName : tOwnerName = '';
  17.   RegCode   : tRegCode   = '';
  18.  
  19. begin
  20.   WriteLn('The current owner is : ', OwnerName);
  21.   WriteLn('The current registration code is : ', RegCode);
  22.   WriteLn;
  23.  
  24.   Write('Enter the new owner name: ');
  25.   ReadLn(OwnerName);
  26.   Write('Enter the new registration code: ');
  27.   ReadLn(RegCode);
  28.  
  29.   If Write2Exe(OwnerName, SizeOf(OwnerName)) <> 0 then
  30.     WriteLn('Owner name not updated!');
  31.  
  32.   If Write2Exe(RegCode, SizeOf(RegCode)) <> 0 then
  33.     WriteLn('Registration code not updated!');
  34. end.
  35.  
  36. { Here's my self mod unit: }
  37.  
  38. {*****************************
  39.  *      EXEMOD.PAS v1.0      *
  40.  *                           *
  41.  *    General purose .EXE    *
  42.  *  self-modifying routines  *
  43.  *****************************
  44.  
  45. 1992-93  HyperDrive Software
  46. Released into the public domain.}
  47.  
  48. {$S-,R-,D-,I-}
  49. {$IFOPT O+}
  50.   {$F+}
  51. {$ENDIF}
  52.  
  53. unit ExeMod;
  54.  
  55. interface
  56.  
  57. var
  58.   ExeName : String;
  59.  
  60. function Write2Exe(var Data2Write; DataSize : Word) : Integer;
  61.  
  62. implementation
  63.  
  64. function Write2Exe(var Data2Write; DataSize : Word): Integer;
  65. const
  66.   PrefixSize = 256;
  67. var
  68.   ExeFile    : File;
  69.   HeaderSize : Word;
  70.   IoError    : Integer;
  71. begin
  72.   Assign(ExeFile, ExeName);
  73.   Reset(ExeFile, 1);
  74.   IoError := IOResult;
  75.  
  76.   If IoError = 0 then
  77.   {-Seek position of header size in EXE File }
  78.   begin
  79.     Seek(ExeFile, 8);
  80.     IoError := IOResult;
  81.   end;  { If }
  82.  
  83.   If IoError = 0 then
  84.   {-Read header size in EXE File }
  85.   begin
  86.     BlockRead(ExeFile, HeaderSize, Sizeof(HeaderSize));
  87.     IoError := IOResult;
  88.   end;
  89.  
  90.   If IoError = 0 then
  91.   {-Seek position of Data in EXE File }
  92.   begin
  93.     Seek(ExeFile, LongInt(16) * (HeaderSize + Seg(Data2Write) - PrefixSeg) +
  94.     IoError := IOResult;
  95.   end;
  96.  
  97.   If IoError = 0 then
  98.   {-Write new Data to EXE File }
  99.   begin
  100.     BlockWrite(ExeFile, Data2Write, DataSize);
  101.     IoError := IOResult;
  102.   end;
  103.  
  104.   Close(ExeFile);
  105.   Write2Exe := IoError;
  106. end;
  107.  
  108. begin
  109.   ExeName := ParamStr(0);
  110. end.
  111.  
  112.